#include "xdata/xdatafield.h"

#include <QtGui/QTextDocument>

namespace yoohoo_xdata {

XDataField::XDataField(XDataField::FieldType type) : _type(type) {
	_required = false;
}

void XDataField::setDesc(QString desc) {
	_desc = desc;
}

QString XDataField::desc() {
	return _desc;
}

void XDataField::setRequired(bool required) {
	_required = required;
}

bool XDataField::isRequired() {
	return _required;
}

void XDataField::setValues(QList<QString> values) {
	_values = values;
}

QList<QString>& XDataField::values() {
	return _values;
}

void XDataField::setType(XDataField::FieldType type) {
	_type = type;
}

XDataField::FieldType XDataField::type() {
	return _type;
}

void XDataField::setOptions(QList<XDataOption> options) {
	_options = options;
}

QList<XDataOption>& XDataField::options() {
	return _options;
}

void XDataField::setLabel(QString label) {
	_label = label;
}

QString XDataField::label() {
	return _label;
}

void XDataField::setVar(QString var) {
	_var = var;
}

QString XDataField::var() {
	return _var;
}

QString XDataField::typeString() {
	if (BOOLEAN == _type) {
		return "boolean";
	} else if (FIXED == _type) {
		return "fixed";
	} else if (HIDDEN == _type) {
		return "hidden";
	} else if (JID_MULTI == _type) {
		return "jid-multi";
	} else if (JID_SINGLE == _type) {
		return "jid-single";
	} else if (LIST_MULTI == _type) {
		return "list-multi";
	} else if (LIST_SINGLE == _type) {
		return "list-single";
	} else if (TEXT_MULTI == _type) {
		return "text-multi";
	} else if (TEXT_PRIVATE == _type) {
		return "text-private";
	} else if (TEXT_SINGLE == _type) {
		return "text-single";
	} else {
		return "Unknown type";
	}
}

QString XDataField::toXml() {
	QString xml;

	QString type;
	if (_type == XDataField::BOOLEAN) {
		xml.append(QString("<field type='%1'").arg("boolean"));
	} else if (_type == XDataField::FIXED) {
		xml.append(QString("<field type='%1'").arg("fixed"));
	} else if (_type == XDataField::HIDDEN) {
		xml.append(QString("<field type='%1'").arg("hidden"));
	} else if (_type == XDataField::JID_MULTI) {
		xml.append(QString("<field type='%1'").arg("jid-multi"));
	} else if (_type == XDataField::JID_SINGLE) {
		xml.append(QString("<field type='%1'").arg("jid-single"));
	} else if (_type == XDataField::LIST_MULTI) {
		xml.append(QString("<field type='%1'").arg("list-multi"));
	} else if (_type == XDataField::LIST_SINGLE) {
		xml.append(QString("<field type='%1'").arg("list-single"));
	} else if (_type == XDataField::TEXT_MULTI) {
		xml.append(QString("<field type='%1'").arg("text-multi"));
	} else if (_type == XDataField::TEXT_PRIVATE) {
		xml.append(QString("<field type='%1'").arg("text-private"));
	} else if (_type == XDataField::TEXT_SINGLE) {
		xml.append(QString("<field type='%1'").arg("text-single"));
	} else {
		xml.append(QString("<field type='%1'").arg("text-single"));
	}
	
	if (!_label.isEmpty()) {
		xml.append(QString(" label='%1'").arg(_label));
	}

	if (!_var.isEmpty()) {
		xml.append(QString(" var='%1'").arg(_var));
	}

	xml.append('>');

	if (!_desc.isEmpty()) {
		xml.append(QString("<desc>%1</desc>").arg(_desc));
	}

	if (_required) {
		xml.append("<required/>");
	}

	foreach (XDataOption option, _options) {
		xml.append(option.toXml());
	}

	foreach (QString value, _values) {
		xml.append(QString("<value>%1</value>").arg(value));
	}

	xml.append("</field>");

	return xml;
}

}
